package com.zhn;

import java.util.ArrayList;
import java.util.List;

/**
 * 给你一个二叉树的根节点 root ，按 任意顺序 ，返回所有从根节点到叶子节点的路径。
 *
 * 叶子节点 是指没有子节点的节点。
 */


public class BinaryTreePaths {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res = new ArrayList<>();
        if(root == null){
            return res;
        }
        List<Integer> path = new ArrayList<>();
        travelBack(root,path,res);
        return res;
    }
    public void travelBack(TreeNode root,List<Integer> path,List<String> res){
        path.add(root.val);
        //递归截止条件，遇到叶子节点
        if(root.left == null && root.right == null){
            //输出
            StringBuilder sb = new StringBuilder();
            for(int i = 0;i < path.size()-1; i++){
                sb.append(path.get(i)).append("->");
            }
            //添加最后一个->指向的元素
            sb.append(path.get(path.size() - 1));
            //结果添加这一次递归到底的这条路径
            res.add(sb.toString());
            return;
        }
        if(root.left != null){
            travelBack(root.left,path,res);
            //回溯
            path.remove(path.size() - 1);
        }
        if(root.right != null){
            travelBack(root.right, path, res);
            path.remove(path.size() - 1);
        }
    }
}
